// 导入全局配置参数
import G from '@/config/global.js'

//  http 请求配置项
const config = {
	//  填自己的开发者服务器接口地址 
	url: G.REQUEST_URL,
	//  请求的参数   
	data: {},
	//  设置请求的 header，header 中不能设置 Referer。
	header: {
		// 'Content-Type': 'application/x-www-form-urlencoded;application/json;charset=UTF-8',
		'Content-Type': 'application/json;charset=UTF-8'
	},
	//  （需大写）有效值：OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT  
	method: "POST",
	//  json    如果设为json，会尝试对返回的数据做一次 JSON.parse    
	dataType: "json",
	//  text    设置响应的数据类型。合法值：text、arraybuffer  1.7.0
	responseType: "text",
	//  收到开发者服务成功返回的回调函数    
	success() {},
	//  接口调用失败的回调函数 
	fail() {},
	//  接口调用结束的回调函数（调用成功、失败都会执行）
	complete() {},
}

/**
 * @description: 导出请求封装函数
 * @param {Object} apis 请求的接口地址
 * @param {Object} data 请求的接口参数
 * @param {Object} queryType 请求的方式（默认为POST）
 */
export const requestApi = (apis, data, queryType) => {
	let options = {
		url: apis,
		method: queryType,
		data: data
	}
	// 动态拼接请求地址
	options.url = config.url + options.url;
	// 返回链式回调
	return new Promise((resolve, reject) => {
		// token拼参拦截
		let token = uni.getStorageSync('token');
		if (token !== '') {
			config.header['token'] = token;
		} else {
			config.header['token'] = '';
		}
		uni.showLoading();
		// 请求返回
		config.complete = (response) => {
			uni.hideLoading();
			console.log("普通请求回调：", response);
			if (response.statusCode !== 200) {
				// 请求异常或失败处理
				uni.showToast({
					icon: 'none',
					title: '网络异常！请稍后重试！'
				});
				return false
			} else if (response.statusCode === 200) {
				// 请求正常处理
				if (response.data.code === -1001) {
					// 统一处理业务异常情况
					uni.showToast({
						icon: 'none',
						title: "登录已失效！"
					});
					setTimeout(() => {
						uni.redirectTo({
							url: '/pages/login/login'
						})
					}, 1000)
					return false
				} else if (response.data.code === 202) {
					uni.showToast({
						icon: 'none',
						title: "该邮箱未注册！"
					});
					setTimeout(() => {
						uni.redirectTo({
							url: '/pages/login/register/register'
						})
					}, 1000)
				}
				resolve(response.data);
			} else {
				uni.showToast({
					icon: 'none',
					title: '网络异常！请稍后重试！'
				});
				reject(response.data);
			}
		}
		// 请求失败处理
		config.fail = (response) => {
			uni.showToast({
				icon: 'none',
				title: '网络异常！请稍后重试！'
			});
		}
		console.log("普通接口请求前参数", Object.assign({}, config, options));
		// 开始请求
		uni.request(Object.assign({}, config, options));
	})
}

// 图片上传配置
const httpUpConfig = {
	// 上传地址
	url: '',
	// 请求头信息
	header: {},
	// 文件路径
	filePath: "",
	// 文件类型名
	name: 'file',
	// 携带参数数据
	formData: {

	}
}

/***
 * @description: 图片上传
 * @param {tempFilePaths} 图片临时路径
 * @return {*}
 * @author: white_queen
 */
export const uphttp = (tempFilePaths, data) => {
	return new Promise((resolve, reject) => {
		// 拼接完整上传地址
		httpUpConfig.url = G.REQUEST_URL + '/common/uploadImg';
		// 接收本地地址
		httpUpConfig.filePath = tempFilePaths;
		// token拼参拦截
		let token = 'Bearer '+uni.getStorageSync('token');
		if (token) {
			httpUpConfig.header['Authorization'] = token;
		}
		// 拼接传参参数
		httpUpConfig.formData = {
			...data
		}
		// 上传回调
		httpUpConfig.complete = (uploadFileRes) => {
			console.log("图片上传回调：", uploadFileRes);
			if (uploadFileRes.statusCode !== 200) {
				// 请求正常处理
				if (uploadFileRes.data.code === 401) {
					// 统一处理业务异常情况
					uni.showToast({
						icon: 'none',
						title: "登录已失效！"
					});
					setTimeout(() => {
						uni.redirectTo({
							url: '/pages/wxlogin/wxlogin'
						})
					}, 1000)
					return false
				}
				// 捕获返回异常
				reject(JSON.parse(uploadFileRes.data));
				uni.showToast({
					icon: 'none',
					title: '上传异常'
				});
				return false;
			} else {
				// 捕获返回成功
				resolve(JSON.parse(uploadFileRes.data));
			}
		}
		console.log("图片上传请求前参数", httpUpConfig);
		// 开启上传
		uni.uploadFile(httpUpConfig);
	});
}